from ui import ImageProcessorUI
from .base import ImageProcessor
from PIL import Image

class GammaProcessor(ImageProcessor):
    def process(self, image: Image.Image, **kwargs) -> Image.Image:
        """
        对图像进行伽马变换（非线性灰度变换）。
        参数:
        - image: 输入的图像对象 (PIL Image)。
        - gamma: 伽马值 (float)，控制灰度变换曲线。
        返回:
        - Image.Image，经过伽马变换后的图像。
        """
        gamma = kwargs.get("gamma", 1.0)
        # 确保图像是灰度图
        if image.mode != 'L':
            image = image.convert('L')
        # 创建伽马查找表并转换为整数
        gamma_table = bytearray([min(255, max(0, int(((i / 255.0) ** gamma) * 255))) for i in range(256)])
        return image.point(gamma_table)

    def get_ui_parameters(self, ui: "ImageProcessorUI") -> dict:
        try:
            gamma_str = ui.gamma_entry.get()
            if not gamma_str:
                raise ValueError("请输入伽马值（推荐 0.1 - 10）")
            gamma = float(gamma_str)
            if gamma <= 0:
                raise ValueError("伽马值必须大于0")
            if gamma > 10:
                ui.show_warning("伽马值过大可能导致效果失真")
            return {"gamma": gamma}
        except ValueError as e:
            ui.show_error(f"参数错误: {e}\n示例: 0.5（变亮）或1.5（变暗）")
            return {}